{module, game_protocol}.  %% version = 0

{exports, [{code_change,3},
           {handle_call,3},
           {handle_cast,2},
           {handle_info,2},
           {init,1},
           {module_info,0},
           {module_info,1},
           {start_link,3},
           {terminate,2}]}.

{attributes, [{behaviour,[gen_server]},
              {behaviour,[ranch_protocol]},
              {author,"admin"}]}.

{labels, 39}.


{function, start_link, 3, 2}.
  {label,1}.
    {line,[{location,"src/game_protocol.erl",23}]}.
    {func_info,{atom,game_protocol},{atom,start_link},3}.
  {label,2}.
    {test_heap,6,3}.
    {put_list,{x,2},nil,{x,4}}.
    {put_list,{x,1},{x,4},{x,4}}.
    {put_list,{x,0},{x,4},{x,2}}.
    {move,{atom,game_protocol},{x,1}}.
    {move,nil,{x,3}}.
    {move,{literal,{local,game_protocol}},{x,0}}.
    {line,[{location,"src/game_protocol.erl",24}]}.
    {call_ext_only,4,{extfunc,gen_server,start_link,4}}.


{function, init, 1, 4}.
  {label,3}.
    {line,[{location,"src/game_protocol.erl",26}]}.
    {func_info,{atom,game_protocol},{atom,init},1}.
  {label,4}.
    {test,is_nonempty_list,{f,3},[{x,0}]}.
    {get_list,{x,0},{x,1},{x,2}}.
    {test,is_nonempty_list,{f,3},[{x,2}]}.
    {get_list,{x,2},{x,3},{x,4}}.
    {test,is_nonempty_list,{f,3},[{x,4}]}.
    {get_list,{x,4},{x,5},{x,6}}.
    {test,is_nil,{f,3},[{x,6}]}.
    {allocate_zero,3,6}.
    {bif,self,{f,0},[],{x,0}}.
    {move,{x,1},{y,0}}.
    {move,{atom,init},{x,1}}.
    {move,{x,3},{y,1}}.
    {move,{x,5},{y,2}}.
    {line,[{location,"src/game_protocol.erl",27}]}.
    send.
    {test_heap,9,0}.
    {put_tuple,5,{x,1}}.
    {put,{atom,state}}.
    {put,{y,0}}.
    {put,{y,1}}.
    {put,{atom,undefined}}.
    {put,{y,2}}.
    {put_tuple,2,{x,0}}.
    {put,{atom,ok}}.
    {put,{x,1}}.
    {deallocate,3}.
    return.


{function, handle_call, 3, 6}.
  {label,5}.
    {line,[{location,"src/game_protocol.erl",30}]}.
    {func_info,{atom,game_protocol},{atom,handle_call},3}.
  {label,6}.
    {test_heap,3,3}.
    {put_tuple,2,{x,0}}.
    {put,{atom,noreply}}.
    {put,{x,2}}.
    return.


{function, handle_cast, 2, 8}.
  {label,7}.
    {line,[{location,"src/game_protocol.erl",33}]}.
    {func_info,{atom,game_protocol},{atom,handle_cast},2}.
  {label,8}.
    {test_heap,3,2}.
    {put_tuple,2,{x,0}}.
    {put,{atom,noreply}}.
    {put,{x,1}}.
    return.


{function, handle_info, 2, 10}.
  {label,9}.
    {line,[{location,"src/game_protocol.erl",36}]}.
    {func_info,{atom,game_protocol},{atom,handle_info},2}.
  {label,10}.
    {test,is_tuple,{f,15},[{x,0}]}.
    {select_tuple_arity,{x,0},{f,16},{list,[2,{f,11},3,{f,14}]}}.
  {label,11}.
    {get_tuple_element,{x,0},0,{x,2}}.
    {test,is_eq_exact,{f,16},[{x,2},{atom,tcp_closed}]}.
    {test,is_tuple,{f,16},[{x,1}]}.
    {test,test_arity,{f,16},[{x,1},5]}.
    {get_tuple_element,{x,1},0,{x,3}}.
    {test,is_eq_exact,{f,16},[{x,3},{atom,state}]}.
    {allocate_zero,2,2}.
    {get_tuple_element,{x,1},3,{y,0}}.
    {bif,self,{f,0},[],{x,0}}.
    {move,{x,1},{y,1}}.
    {move,{atom,registered_name},{x,1}}.
    {line,[{location,"src/game_protocol.erl",45}]}.
    {call_ext,2,{extfunc,erlang,process_info,2}}.
    {test,is_tuple,{f,12},[{x,0}]}.
    {test,test_arity,{f,12},[{x,0},2]}.
    {get_tuple_element,{x,0},0,{x,1}}.
    {test,is_eq_exact,{f,12},[{x,1},{atom,registered_name}]}.
    {get_tuple_element,{x,0},1,{x,0}}.
    {jump,{f,13}}.
  {label,12}.
    {bif,self,{f,0},[],{x,0}}.
  {label,13}.
    {test_heap,12,1}.
    {put_list,{y,0},nil,{x,2}}.
    {put_list,{integer,45},{x,2},{x,2}}.
    {put_list,{integer,2},{x,2},{x,2}}.
    {put_list,{atom,handle_info},{x,2},{x,2}}.
    {put_list,{atom,game_protocol},{x,2},{x,2}}.
    {put_list,{x,0},{x,2},{x,1}}.
    {trim,1,1}.
    {move,{literal,"{~p} ~p:~p/~p[~w] tcp_closed =====> ~w ~n~n"},{x,0}}.
    {line,[{location,"src/game_protocol.erl",45}]}.
    {call_ext,2,{extfunc,lager,info,2}}.
    {test_heap,4,0}.
    {put_tuple,3,{x,0}}.
    {put,{atom,stop}}.
    {put,{atom,normal}}.
    {put,{y,0}}.
    {deallocate,1}.
    return.
  {label,14}.
    {get_tuple_element,{x,0},0,{x,2}}.
    {test,is_eq_exact,{f,16},[{x,2},{atom,tcp}]}.
    {test,is_tuple,{f,16},[{x,1}]}.
    {test,test_arity,{f,16},[{x,1},5]}.
    {get_tuple_element,{x,0},1,{x,3}}.
    {get_tuple_element,{x,0},2,{x,4}}.
    {get_tuple_element,{x,1},0,{x,5}}.
    {test,is_eq_exact,{f,16},[{x,5},{atom,state}]}.
    {get_tuple_element,{x,1},2,{x,6}}.
    {get_tuple_element,{x,1},3,{x,7}}.
    {test,is_eq_exact,{f,16},[{x,7},{x,3}]}.
    {allocate,2,7}.
    {move,{x,4},{x,0}}.
    {move,{x,3},{y,0}}.
    {move,{x,6},{y,1}}.
    {line,[{location,"src/game_protocol.erl",40}]}.
    {call,2,{f,32}}.
    {move,{x,0},{x,4}}.
    {move,{y,1},{x,2}}.
    {move,{literal,[{active,once}]},{x,1}}.
    {move,{atom,setopts},{x,3}}.
    {move,{y,0},{x,0}}.
    {move,{x,4},{y,1}}.
    {trim,1,1}.
    {line,[{location,"src/game_protocol.erl",41}]}.
    {apply,2}.
    {test,is_eq_exact,{f,17},[{x,0},{atom,ok}]}.
    {test_heap,3,0}.
    {put_tuple,2,{x,0}}.
    {put,{atom,noreply}}.
    {put,{y,0}}.
    {deallocate,1}.
    return.
  {label,15}.
    {test,is_eq_exact,{f,16},[{x,0},{atom,init}]}.
    {allocate,0,2}.
    {move,{x,1},{x,0}}.
    {line,[{location,"src/game_protocol.erl",37}]}.
    {call,1,{f,25}}.
    {test_heap,3,1}.
    {put_tuple,2,{x,1}}.
    {put,{atom,noreply}}.
    {put,{x,0}}.
    {move,{x,1},{x,0}}.
    {deallocate,0}.
    return.
  {label,16}.
    {test_heap,3,2}.
    {put_tuple,2,{x,0}}.
    {put,{atom,noreply}}.
    {put,{x,1}}.
    return.
  {label,17}.
    {line,[{location,"src/game_protocol.erl",41}]}.
    {badmatch,{x,0}}.


{function, terminate, 2, 19}.
  {label,18}.
    {line,[{location,"src/game_protocol.erl",50}]}.
    {func_info,{atom,game_protocol},{atom,terminate},2}.
  {label,19}.
    {test,is_tuple,{f,18},[{x,1}]}.
    {test,test_arity,{f,18},[{x,1},5]}.
    {get_tuple_element,{x,1},0,{x,2}}.
    {test,is_eq_exact,{f,18},[{x,2},{atom,state}]}.
    {allocate_zero,2,2}.
    {get_tuple_element,{x,1},3,{y,0}}.
    {bif,self,{f,0},[],{x,1}}.
    {move,{x,0},{y,1}}.
    {move,{x,1},{x,0}}.
    {move,{atom,registered_name},{x,1}}.
    {line,[{location,"src/game_protocol.erl",51}]}.
    {call_ext,2,{extfunc,erlang,process_info,2}}.
    {test,is_tuple,{f,20},[{x,0}]}.
    {test,test_arity,{f,20},[{x,0},2]}.
    {get_tuple_element,{x,0},0,{x,1}}.
    {test,is_eq_exact,{f,20},[{x,1},{atom,registered_name}]}.
    {get_tuple_element,{x,0},1,{x,0}}.
    {jump,{f,21}}.
  {label,20}.
    {bif,self,{f,0},[],{x,0}}.
  {label,21}.
    {test_heap,14,1}.
    {put_list,{y,0},nil,{x,2}}.
    {put_list,{y,1},{x,2},{x,2}}.
    {put_list,{integer,51},{x,2},{x,2}}.
    {put_list,{integer,2},{x,2},{x,2}}.
    {put_list,{atom,terminate},{x,2},{x,2}}.
    {put_list,{atom,game_protocol},{x,2},{x,2}}.
    {put_list,{x,0},{x,2},{x,1}}.
    {trim,2,0}.
    {move,{literal,"{~p} ~p:~p/~p[~w] protocol terminate, reason ======> ~w ,socket =====> ~w ~n~n"},
          {x,0}}.
    {line,[{location,"src/game_protocol.erl",51}]}.
    {call_ext,2,{extfunc,lager,info,2}}.
    {move,{atom,ok},{x,0}}.
    {deallocate,0}.
    return.


{function, code_change, 3, 23}.
  {label,22}.
    {line,[{location,"src/game_protocol.erl",54}]}.
    {func_info,{atom,game_protocol},{atom,code_change},3}.
  {label,23}.
    {test_heap,3,2}.
    {put_tuple,2,{x,0}}.
    {put,{atom,ok}}.
    {put,{x,1}}.
    return.


{function, start_init, 1, 25}.
  {label,24}.
    {line,[{location,"src/game_protocol.erl",60}]}.
    {func_info,{atom,game_protocol},{atom,start_init},1}.
  {label,25}.
    {test,is_tuple,{f,24},[{x,0}]}.
    {test,test_arity,{f,24},[{x,0},5]}.
    {get_tuple_element,{x,0},0,{x,1}}.
    {test,is_eq_exact,{f,24},[{x,1},{atom,state}]}.
    {allocate_zero,4,1}.
    {get_tuple_element,{x,0},2,{y,3}}.
    {move,{x,0},{y,2}}.
    {get_tuple_element,{x,0},1,{x,0}}.
    {line,[{location,"src/game_protocol.erl",61}]}.
    {call_ext,1,{extfunc,ranch,handshake,1}}.
    {test,is_tuple,{f,30},[{x,0}]}.
    {test,test_arity,{f,30},[{x,0},2]}.
    {get_tuple_element,{x,0},0,{x,1}}.
    {test,is_eq_exact,{f,30},[{x,1},{atom,ok}]}.
    {get_tuple_element,{x,0},1,{x,0}}.
    {move,{literal,[{active,once},{packet,0}]},{x,1}}.
    {move,{atom,setopts},{x,3}}.
    {move,{y,3},{x,2}}.
    {move,{x,0},{y,1}}.
    {line,[{location,"src/game_protocol.erl",62}]}.
    {apply,2}.
    {test,is_eq_exact,{f,29},[{x,0},{atom,ok}]}.
    {move,{y,3},{x,1}}.
    {move,{atom,sockname},{x,2}}.
    {kill,{y,3}}.
    {move,{y,1},{x,0}}.
    {line,[{location,"src/game_protocol.erl",63}]}.
    {apply,1}.
    {test,is_tuple,{f,28},[{x,0}]}.
    {test,test_arity,{f,28},[{x,0},2]}.
    {get_tuple_element,{x,0},0,{x,1}}.
    {test,is_eq_exact,{f,28},[{x,1},{atom,ok}]}.
    {get_tuple_element,{x,0},1,{x,2}}.
    {test,is_tuple,{f,28},[{x,2}]}.
    {test,test_arity,{f,28},[{x,2},2]}.
    {get_tuple_element,{x,2},0,{y,3}}.
    {get_tuple_element,{x,2},1,{y,0}}.
    {bif,self,{f,0},[],{x,0}}.
    {move,{atom,registered_name},{x,1}}.
    {line,[{location,"src/game_protocol.erl",64}]}.
    {call_ext,2,{extfunc,erlang,process_info,2}}.
    {test,is_tuple,{f,26},[{x,0}]}.
    {test,test_arity,{f,26},[{x,0},2]}.
    {get_tuple_element,{x,0},0,{x,1}}.
    {test,is_eq_exact,{f,26},[{x,1},{atom,registered_name}]}.
    {get_tuple_element,{x,0},1,{x,0}}.
    {jump,{f,27}}.
  {label,26}.
    {bif,self,{f,0},[],{x,0}}.
  {label,27}.
    {test_heap,14,1}.
    {put_list,{y,0},nil,{x,2}}.
    {put_list,{y,3},{x,2},{x,2}}.
    {put_list,{integer,64},{x,2},{x,2}}.
    {put_list,{integer,1},{x,2},{x,2}}.
    {put_list,{atom,start_init},{x,2},{x,2}}.
    {put_list,{atom,game_protocol},{x,2},{x,2}}.
    {put_list,{x,0},{x,2},{x,1}}.
    {kill,{y,3}}.
    {trim,1,3}.
    {move,{literal,"{~p} ~p:~p/~p[~w] new connect from =====> ~w:~w ~n~n"},
          {x,0}}.
    {line,[{location,"src/game_protocol.erl",64}]}.
    {call_ext,2,{extfunc,lager,info,2}}.
    {move,{y,1},{x,1}}.
    {move,{y,0},{x,2}}.
    {move,{integer,4},{x,0}}.
    {line,[{location,"src/game_protocol.erl",65}]}.
    {call_ext_last,3,{extfunc,erlang,setelement,3},3}.
  {label,28}.
    {line,[{location,"src/game_protocol.erl",63}]}.
    {badmatch,{x,0}}.
  {label,29}.
    {line,[{location,"src/game_protocol.erl",62}]}.
    {badmatch,{x,0}}.
  {label,30}.
    {line,[{location,"src/game_protocol.erl",61}]}.
    {badmatch,{x,0}}.


{function, rec_data, 2, 32}.
  {label,31}.
    {line,[{location,"src/game_protocol.erl",67}]}.
    {func_info,{atom,game_protocol},{atom,rec_data},2}.
  {label,32}.
    {test,is_tuple,{f,31},[{x,1}]}.
    {test,test_arity,{f,31},[{x,1},5]}.
    {get_tuple_element,{x,1},0,{x,2}}.
    {test,is_eq_exact,{f,31},[{x,2},{atom,state}]}.
    {allocate_zero,2,2}.
    {bif,self,{f,0},[],{x,2}}.
    {move,{x,0},{y,0}}.
    {move,{x,1},{y,1}}.
    {move,{atom,registered_name},{x,1}}.
    {move,{x,2},{x,0}}.
    {line,[{location,"src/game_protocol.erl",68}]}.
    {call_ext,2,{extfunc,erlang,process_info,2}}.
    {test,is_tuple,{f,33},[{x,0}]}.
    {test,test_arity,{f,33},[{x,0},2]}.
    {get_tuple_element,{x,0},0,{x,1}}.
    {test,is_eq_exact,{f,33},[{x,1},{atom,registered_name}]}.
    {get_tuple_element,{x,0},1,{x,0}}.
    {jump,{f,34}}.
  {label,33}.
    {bif,self,{f,0},[],{x,0}}.
  {label,34}.
    {test_heap,14,1}.
    {put_tuple,1,{x,2}}.
    {put,{y,0}}.
    {put_list,{x,2},nil,{x,2}}.
    {put_list,{integer,68},{x,2},{x,2}}.
    {put_list,{integer,2},{x,2},{x,2}}.
    {put_list,{atom,rec_data},{x,2},{x,2}}.
    {put_list,{atom,game_protocol},{x,2},{x,2}}.
    {put_list,{x,0},{x,2},{x,1}}.
    {trim,1,1}.
    {move,{literal,"{~p} ~p:~p/~p[~w] rec_data ===== ~w ~n~n"},{x,0}}.
    {line,[{location,"src/game_protocol.erl",68}]}.
    {call_ext,2,{extfunc,lager,info,2}}.
    {move,{y,0},{x,0}}.
    {deallocate,1}.
    return.


{function, module_info, 0, 36}.
  {label,35}.
    {line,[]}.
    {func_info,{atom,game_protocol},{atom,module_info},0}.
  {label,36}.
    {move,{atom,game_protocol},{x,0}}.
    {line,[]}.
    {call_ext_only,1,{extfunc,erlang,get_module_info,1}}.


{function, module_info, 1, 38}.
  {label,37}.
    {line,[]}.
    {func_info,{atom,game_protocol},{atom,module_info},1}.
  {label,38}.
    {move,{x,0},{x,1}}.
    {move,{atom,game_protocol},{x,0}}.
    {line,[]}.
    {call_ext_only,2,{extfunc,erlang,get_module_info,2}}.
